如何使用 c++ stl 中的 map 以及红黑树 (一)



Two Sum

Given an array of integers, find two numbers such thatthey add up to a specific target number.

The function twoSum should return indices of the twonumbers such that they add up to the target, where index1 must be less thanindex2. Please note that your returned answers (both index1 and index2) are notzero-based.

You may assume that each input would have exactly one solution.

Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2

 

 

       乍看到这题,想必学过编程的小白都会想到用暴力破解,但试过之后发现数据量大之后会爆炸,超时。

       但是整体思路还是不变的。

      暴力破解的思路是: 有了A之后,就寻找一个B,使得满足A+B=C,且AC是已知的,那么就是寻找B=C-A

 

既然用循环寻找B会超时,那么使用一个寻找起来很快的数据结构是不是会好点呢?

这里我就想到了c++里的map(当然,并不是说只能用map)了

 

 



第一部分

Map的特点是:

              1、支持快速查找,查找的复杂度基本是Log(N)
              2
、快速插入,快速删除,快速修改

       因此这里复习一下如何使用map

 

 

第二部分

Map采用的是红黑树实现的

       因此,我也会趁此机会复习一下简单的红黑树实现。

 

 

第三部分

       虽然知道了重点在于查找的速度,但是普通的map可是不支持重复的key的啊?我们如何利用map来解决这个问题呢?

                                   第一部分、如何使用stl中的map

 







-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

                                                                                             第一部分


1.1特点:

  1. map中的数据类型是 key-value 结构,且keyvalue的类型可以是任意类型。

  2. map增加或删除元素十分容易

  3. 可以根据key的值修改value,但不能修改key的值

  4. map的查询时间复杂度为LogN,也就是如果包含1000个记录,查询次数最多为  10次,1,000,000个记录,最多查找20次。

 

 

1.2使用:

 

       1.2.1加载头文件

              与使用stl 中其他数据结构类似,都是加上相应名称的头文件

                     #include<map>

      

       1.2.2map对象的声明(构造函数)

              方法一、

                     比如  map<int, int> Map 即声明了一个keyint类型, valueint类型的对象Map

                     比如

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值